"""
GROUP CONCAT 函数替换
"""

import re
import logging


def change_group_concat_concat_spe_2_string_agg(m):
    logging.info("change_group_concat_concat_spe_2_string_agg")
    logging.info(m)
    new_group_concat = "string_agg({}({}),{})".format(m.group(2), m.group(3), m.group(6))
    logging.info(new_group_concat)
    return new_group_concat


def change_group_concat_concat_2_string_agg(m):
    logging.info("change_group_concat_concat_2_string_agg")
    logging.info(m)
    new_group_concat = "string_agg({}({}))".format(m.group(2), m.group(3))
    logging.info(new_group_concat)
    return new_group_concat


def change_group_concat_2_string_agg(m):
    logging.info("change_group_concat_2_string_agg")
    logging.info(m)
    new_group_concat = "string_agg({},{})".format(m.group(2), m.group(3))
    logging.info(new_group_concat)
    return new_group_concat


def change_group_concat_2_separator_string_agg(m):
    logging.info("change_group_concat_2_separator_string_agg")
    logging.info(m)
    new_group_concat = "string_agg({},{})".format(m.group(2), m.group(4))
    logging.info(new_group_concat)
    return new_group_concat


def change_group_concat_default(m):
    logging.info("change_group_concat_default")
    logging.info(m)
    new_group_concat = "string_agg({},',')".format(m.group(2))
    logging.info(new_group_concat)
    return new_group_concat


def rep_complex_fn_group_concat(document_content):
    logging.info(" 》》》 开始执行 rep_complex_fn_group_concat 替换  >>>> ")
    group_concat_patten = re.compile(
        r"(GROUP_CONCAT|group_concat)\((CONCAT|concat)\((.*)\)(.*)(SEPARATOR|separator)(.*)\)")
    result = group_concat_patten.sub(change_group_concat_concat_spe_2_string_agg, document_content)
    document_content = result

    group_concat_patten = re.compile(r"(GROUP_CONCAT|group_concat)\((CONCAT|concat)\(([^\(]*)\)\)")
    result = group_concat_patten.sub(change_group_concat_concat_2_string_agg, document_content)
    document_content = result

    group_concat_patten = re.compile(r"(GROUP_CONCAT|group_concat)\(([^,\(\)]*)(SEPARATOR|separator)(.*)\)")
    result = group_concat_patten.sub(change_group_concat_2_separator_string_agg, document_content)
    document_content = result

    group_concat_patten = re.compile(r"(GROUP_CONCAT|group_concat)\(([^,\(\)]*)(SEPARATOR|separator]*)(.*)\)")
    result = group_concat_patten.sub(change_group_concat_2_string_agg, document_content)
    document_content = result

    group_concat_patten = re.compile(r"(GROUP_CONCAT|group_concat)\(([^,\(\)]*)\)")
    result = group_concat_patten.sub(change_group_concat_default, document_content)
    document_content = result

    return document_content
